package com.slz.crm.pojo.vo;

import com.fasterxml.jackson.annotation.JsonFormat;
import com.slz.crm.pojo.entity.ContactTaskEntity;
import lombok.Data;

import java.time.LocalDateTime;

/**
 * 联络任务VO
 */
@Data
public class ContactTaskVO {
    /**
     * 任务ID
     */
    private Long id;

    /**
     * 任务标题
     */
    private String taskTitle;

    /**
     * 关联客户公司ID
     */
    private Long companyId;

    /**
     * 关联客户公司名称
     */
    private String companyName;

    /**
     * 关联联系人ID
     */
    private Long contactId;

    /**
     * 关联联系人姓名
     */
    private String contactName;

    /**
     * 关联销售机会ID
     */
    private Long opportunityId;

    /**
     * 关联销售机会标题
     */
    private String opportunityTitle;

    /**
     * 任务类型
     */
    private String taskType;

    /**
     * 任务内容
     */
    private String taskContent;

    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime endTime;

    /**
     * 优先级
     */
    private Integer priority;

    /**
     * 状态
     */
    private Integer status;

    /**
     * 任务执行人ID
     */
    private Long assigneeId;

    /**
     * 任务执行人姓名
     */
    private String assigneeName;

    /**
     * 创建人ID
     */
    private Long creatorId;

    /**
     * 创建人姓名
     */
    private String creatorName;

    /**
     * 创建时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createTime;

    /**
     * 最后更新时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updateTime;

    /**
     * 从Entity创建VO，需要传入公司名称、联系人名称、销售机会标题、执行人姓名和创建人姓名
     * @param entity 联络任务实体
     * @param companyName 公司名称
     * @param contactName 联系人姓名
     * @param opportunityTitle 销售机会标题
     * @param assigneeName 执行人姓名
     * @param creatorName 创建人姓名
     * @return ContactTaskVO
     */
    public static ContactTaskVO fromEntity(ContactTaskEntity entity, String companyName, String contactName,
                                      String opportunityTitle, String assigneeName, String creatorName) {
        if (entity == null) {
            return null;
        }

        ContactTaskVO vo = new ContactTaskVO();
        vo.setId(entity.getId());
        vo.setTaskTitle(entity.getTaskTitle());
        vo.setCompanyId(entity.getCompanyId());
        vo.setCompanyName(companyName);
        vo.setContactId(entity.getContactId());
        vo.setContactName(contactName);
        vo.setOpportunityId(entity.getOpportunityId());
        vo.setOpportunityTitle(opportunityTitle);
        vo.setTaskType(entity.getTaskType());
        vo.setTaskContent(entity.getTaskContent());
        vo.setStartTime(entity.getStartTime() != null ?
            entity.getStartTime().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDateTime() : null);
        vo.setEndTime(entity.getEndTime() != null ?
            entity.getEndTime().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDateTime() : null);
        vo.setPriority(entity.getPriority());
        vo.setStatus(entity.getStatus());
        vo.setAssigneeId(entity.getAssigneeId());
        vo.setAssigneeName(assigneeName);
        vo.setCreatorId(entity.getCreatorId());
        vo.setCreatorName(creatorName);
        vo.setCreateTime(entity.getCreateTime() != null ?
            entity.getCreateTime().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDateTime() : null);
        vo.setUpdateTime(entity.getUpdateTime() != null ?
            entity.getUpdateTime().toInstant().atZone(java.time.ZoneId.systemDefault()).toLocalDateTime() : null);

        return vo;
    }
}